#define  _CRT_SECURE_NO_WARNINGS 1
//#include"head.h"

//int main()
//{
//	char a = -1;
//	//-1:
//	//10000000 00000000 00000000 00000001
//	//11111111 11111111 11111111 11111110
//	//11111111 11111111 11111111 11111111   -1的补码
//	//存入char类型，发生截断
//	//11111111 -> a
//	signed char b = -1;
//	//11111111 -> b
//	unsigned char c = -1;
//	//11111111 -> c
//
//	printf("a = %d, b = %d, c = %d\n", a, b, c);
//	//%d-->以十进制的形式，打印有符号整数
//	//发生整型提升
//	//补码：
//	//11111111 11111111 11111111 11111111 -- a
//	//11111111 11111111 11111111 11111111 -- b
//	//00000000 00000000 00000000 11111111 -- c
//
//    printf("a = %u, b = %u, c = %u\n", a, b, c);
//    //%u-->以十进制形式，打印无符号整数
//
//	return 0;
//}


/*
整型提升的规则
1. 有符号小整型（如char、short）
	若原类型是有符号（signed），提升时会进行 “符号扩展”：
	用原类型的符号位（最高位）填充扩展出的高位，保证数值的符号和大小不变。
2. 无符号小整型（如unsigned char、unsigned short）
	若原类型是无符号（unsigned），提升时会进行 “零扩展”：
	扩展出的高位全部填充 0，保证数值大小不变。
*/

//int main()
//{
//	char a = -128;
//	//10000000 00000000 00000000 10000000
//	//11111111 11111111 11111111 01111111
//	//11111111 11111111 11111111 10000000   -128的补码
//	//存入char类型，发生截断
//	//10000000 -> a
//
//	printf("a = %u\n", a);
//	//%u-->以十进制形式，打印无符号整数
//	//整型提升
//	//11111111 11111111 11111111 10000000
//
//	return 0;
//}

//int main()
//{
//    char a = 128;
//	//char类型范围：-128~127
//	//00000000 00000000 00000000 10000000
//	//char 类型，发生截断
//	//10000000 -> a
//	//把最高位当作了符号位
//
//	printf("a = %u\n", a);
//	//11111111 11111111 11111111 10000000
//
//	return 0;
//}

//=======================================================

//int main()
//{
//	char a[1000];
//	int i;
//	for (i = 0; i < 1000; i++)
//	{
//		a[i] = -1 - i;
//	}
//	printf("%zd\n", strlen(a));//255
//	//strlen求的是\0之前的字符串长度
//	//'\0' --> 0
//
//	//-1 -2 -3 -4 ... -999 -1000  --> error
//	//-1 -2 -3 -4 ... -128 127 126 125 ... 3 2 1 0 -1 -2 -3 -4 ...
//
//	return 0;
//}



//unsigned char i = 0;
////unsigned char -> 0~255
//// 00000000 00000000 00000000 00000000 
//// 00000000 -> i
//int main()
//{
//	for (i = 0; i <= 255; i++)
//	{
//		printf("%d ", i + 1);
//	}
//	//00000000 -> 11111111 -> 00000000 -> ...
//	//死循环
//	return 0;
//}

//int main()
//{
//	unsigned int i; //无符号， i 始终 >=0
//	for (i = 9; i >= 0; i--)
//	{
//        printf("%u\n", i);
//	}
//	//00000000 00000000 00000000 00001001
//	//00000000 00000000 00000000 00000000
//	//11111111 11111111 11111111 11111111
//	//又是一个死循环
//
//	return 0;
//}

//=======================================================

//×86环境  小端字节序
//int main()
//{
//	int a[4] = { 1,2,3,4 };
//	// 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00
//	int* ptr1 = (int*)(&a + 1);
//	int* ptr2 = (int*)((int)a + 1);
//
//	printf("%x, %x\n", ptr1[-1], *ptr2);
//	//%x --> 以16进制形式打印数据
//	//04 00 00 00 -> ptr1[-1] -> 0x04
//	//00 00 00 02 -> *ptr2 -> 0x02000000
//
//	return 0;
//}